package tests;

import server.Dinosauro;
import server.Giocatore;
import server.Gioco;

import junit.framework.TestCase;

public class TestGioco extends TestCase {
		
		private Gioco gioco;	
		
		public void setUp(){
			
			gioco = new Gioco();
			gioco.getMappa().inizializzaMappa();
			gioco.creaGiocatore("lorys","abc");
			gioco.login("lorys", "abc");
			gioco.creaSpecie("lorys","razza1",false);
			gioco.entraInPartita("lorys");
			for (Giocatore g: gioco.getGiocatoriInGioco())
			{	
				for(Dinosauro d: g.getBrancoGiocatore())
				{
					if(d.getNome().equalsIgnoreCase(g.getSpecie())==true){
						d.spostaDinosauro(18, 18);
					}
				}
			}
		}
		
		
		public void testNotNull() {
			assertNotNull(gioco);
		}
		/**
		 * controlla che il metodo creaUtente funzioni correttamente
		 */
		public void testCreaGiocatore(){
			String s1="";
			s1=gioco.creaGiocatore("lorys2","abc");
			if(s1.equalsIgnoreCase("@Ok"))
				assertTrue(true);
			else fail();
			
		}
		/**
		 * controlla che il metodo creaspecie funzioni correttamente
		 */
		public void testCreaSpecie(){
			String s1="";
			gioco.creaGiocatore("lorys2","abc");
			gioco.login("lorys2","abc");
			s1=gioco.creaSpecie("lorys2","razza2",false);
			if(s1.equalsIgnoreCase("@Ok"))
				assertTrue(true);
			else fail();
			
		}
		/**
		 * controlla che il metodo entrainpartita funzioni correttamente
		 */
		public void testEntraInPartita(){
			String s1="";
			gioco.creaGiocatore("lorys2", "abc");
			gioco.login("lorys2", "abc");
			gioco.creaSpecie("lorys2","razza2",false);
			s1=gioco.entraInPartita("lorys2");
			if(s1.equalsIgnoreCase("@Ok"))
				assertTrue(true);
			else fail();
			
		}
		
		/**
		 * controlla che la gestione del turno venga effettuata correttamente 
		 * con 1,2,3 o 0 giocatori in partita
		 */
		public void testGestioneTurno(){
			String s1="";
			gioco.creaGiocatore("lorys2","abc");
			gioco.login("lorys2", "abc");
			gioco.creaSpecie("lorys2","razza2",false);
			gioco.creaGiocatore("lorys3","abc");
			gioco.login("lorys3", "abc");
			gioco.creaSpecie("lorys3","razza3",false);
			gioco.entraInPartita("lorys2");
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys")){
				assertTrue(true);}
			else fail();
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys2"))
				assertTrue(true);
			else fail();
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys"))
				assertTrue(true);
			else fail();
			gioco.esciDallaPartita("lorys2");
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys"))
				assertTrue(true);
			else fail();
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys"))
				assertTrue(true);
			else fail();
			gioco.entraInPartita("lorys2");
			gioco.entraInPartita("lorys3");
			
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys2"))
				assertTrue(true);
			else fail();
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys3"))
				assertTrue(true);
			else fail();
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys"))
				assertTrue(true);
			else fail();
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@cambioTurno,user=lorys2"))
				assertTrue(true);
			else fail();
			gioco.esciDallaPartita("lorys2");
			gioco.esciDallaPartita("lorys3");
			gioco.esciDallaPartita("lorys");
			s1=gioco.cambiaTurno();
			if(s1.contentEquals("@no,@tokenNonValido"))
				assertTrue(true);
			else fail();
		}
		
		/**
		 * metodo che testa il funzionamento dello spostamento di un dinosauro
		 */
		public void testSpostamento(){	
			Dinosauro d2=null;
			for (Giocatore g: gioco.getGiocatoriInGioco())
			{	
				for(Dinosauro d: g.getBrancoGiocatore())
				{
					if(d.getNome().equalsIgnoreCase(g.getSpecie())==true){
						d2=d;
					}
				}
			}
					String mossa=gioco.muoviDinosauro(d2.getNome(),19,19,0);
					if (mossa.contentEquals("@tokenNonValido")==false)
						assertTrue(true);
					else fail();
		}
		/**
		 * metodo che testa la "gioco.aumentaDimensione()"
		 */
		public void testDimensione(){
			Dinosauro d2=null;
			for (Giocatore g: gioco.getGiocatoriInGioco())
			{
				for(Dinosauro d: g.getBrancoGiocatore())
				{
					if(d.getNome().equalsIgnoreCase("razza1")==true){
						d2=d;
					}
				}
			}
			String aumenta=gioco.aumentaDimensione(d2.getNome(),0);
			if (aumenta.contentEquals("@tokenNonValido")==false)
				assertTrue(true);
			else fail();
		}
			
			
		/**
		 * metodo che testa il corretto funzionamento della "gioco.deponiUovo()"	
		 */
		public void testDeposizione(){
		Dinosauro d2=null;
			for (Giocatore g: gioco.getGiocatoriInGioco())
			{
				for(Dinosauro d: g.getBrancoGiocatore())
				{
					if(d.getNome().equalsIgnoreCase("razza1")==true){
						d2=d;
					}
				}
			}
			String deposizione=gioco.deponiUovo(d2.getNome(),"razza1",0);
			if (deposizione.contentEquals("@tokenNonValido")==false)
				assertTrue(true);
			else fail();
		}
		
		/**
		 * metodo che testa se la classifica ritorna una stringa non nulla
		 */
		public void testClassifica(){
			String stringa=gioco.classifica();
			assertNotNull(stringa);
		}
			

		/**
		 * metodo che testa se la listaGiocatori ritorna una stringa non nulla
		 */
		public void testListaGiocatoriInGioco(){
			String stringa=gioco.listaGiocatoriInGioco();
			assertNotNull(stringa);
		}	
		

		/**
		 * metodo che testa se la mappaGenerale ritorna una stringa non nulla
		 */
		public void testMappaGenerale(){
			String stringa=gioco.mappaGenerale("lorys");
			assertNotNull(stringa);
		}
		

		/**
		 * metodo che testa se la vistaGenerale ritorna una stringa non nulla
		 */
		public void testVistaGenerale(){
			String stringa=gioco.vistaGenerale("lorys");
			assertNotNull(stringa);
		}
		

		public void tearDown(){
			gioco= null;
		}
}
		